using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Scripting.APIUpdating;

public class Lesson6 : MonoBehaviour
{
    [Header("Binding")]
    public InputAction inputBinding;
    [Header("1D Axis")]
    public InputAction input1DAxis;
    [Header("2D Vector")]
    public InputAction input2DVector;
    [Header("3D Vector")]
    public InputAction input3DVector;
    [Header("Button With One Modifier")]
    public InputAction inputWithOne;
    [Header("Button With Two Modifier")]
    public InputAction inputWithTwo;
    void Start()
    {
        #region InputAction是什么?
        // 顾名思义，InputAction是InputSystem帮助我们封装的输入动作类
        // 它的主要作用，是不需要我们通过写代码的形式来处理输入
        // 而是直接在Inspector窗口编辑想要处理的输入类型
        // 当输入触发时，我们只需要把精力花在输入触发后的逻辑处理上
        // 我们在想要用于处理输入动作的类中
        // 申明对应的InputAction类型的成员变量（注意：需要引|用命名空间unityEngine.InputSystem）
        #endregion

        #region InputAction参数相关
        //1.启用输入检测
        inputBinding.Enable();
        // input1DAxis.Enable();
        // input2DVector.Enable();
        // input3DVector.Enable();
        // inputWithOne.Enable();
        // inputWithTwo.Enable();

        //2.操作监听相关
        //开始操作
        inputBinding.started += TestFun;
        //真正触发
        inputBinding.performed += (context) =>
        {
            Debug.LogFormat("触发事件调用");
            //3.关键参数 CallbackContext
            //当前状态(Disabled 没有启用 Waiting 等待 Started 开始 Performed 触发 Canceled 结束)
            Debug.LogFormat("phase：{0}", context.phase);

            //动作行为信息
            Debug.LogFormat("action：{0}", context.action.name);

            //控件(设备)信息
            Debug.LogFormat("action：{0}", context.control.name);

            //获取值
            // context.ReadValue<float>

            //持续时间
            Debug.LogFormat("duration：{0}", context.duration);

            //开始时间
            Debug.LogFormat("startTime{0}", context.startTime);
        };
        //结束操作
        inputBinding.canceled += (context) =>
        {
            Debug.LogFormat("结束事件调用");
        };


        #endregion

        #region InputAction的使用
        //组合键盘:Shift+A
        inputWithOne.performed += (context) =>
        {
            Debug.LogFormat("组合键 Shift+A 触发了.");
        };
        //组合键:Ctrl+Shift+A
        inputWithTwo.performed += (context) =>
        {
            Debug.LogFormat("组合键 Ctrl+Shift+A 触发了.");
        };
        #endregion

        #region 特殊输入设置
        #endregion
    }

    private void TestFun(InputAction.CallbackContext context)
    {

    }

    void Update()
    {
        // if (input1DAxis.IsPressed())
        // {
        //     Debug.LogFormat("input1DAxis value:{0}", input1DAxis.ReadValue<float>());
        // }
        // if (input2DVector.IsPressed())
        // {
        //     Debug.LogFormat("input2DVector value:{0}", input2DVector.ReadValue<Vector2>());
        // }
        //按键时IsPressed无效,不知道为什么
        // if (input3DVector.IsPressed())
        // {
        //     Debug.LogFormat("input3DVector value:{0}", input3DVector.ReadValue<Vector3>());
        // }
        // Debug.LogFormat("input3DVector value:{0}", input3DVector.ReadValue<Vector3>());
    }
}
